package org.song.config.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;

/**
 * @author song
 * @date 2022/3/7 11:11
 * jackson配置类，在实际开发中分布式id生成使用雪花算法（生成19位长度Id），在web开发中用JSON格式进行传输时LONG类型的数据前端Number长度最大精度未16位可能会出现后几位为0
 * jackson解析器是springmvc框架自带的解析器所以使用jackson配置id解析解决前端序列化精度丢失问题
 **/
 // @Configuration( value = "jacksonConfig" )    //声明配置类注入spring容器,getSingleton()从单例池Map中获取     暂不启用！！！
 //FIXME :配置了Jackson Long类型转换的话 使用@RequestBody注解接受请求体的JSON格式字符串时属性必须一一对应
public class JacksonConfig {

    @Bean
    @Primary
    @ConditionalOnMissingBean( value = {ObjectMapper.class} )
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();

        // 全局配置序列化返回 JSON 处理
        SimpleModule simpleModule = new SimpleModule();
        //JSON Long ==> String  将Long类型转为String
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        return objectMapper;
    }

}
